﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Camara
{
    public partial class Form1 : Form
    {

        #region 窗体显示的动画效果制作，使用Windows API完成【此处为参考说明】
        /// <summary>
        /// 函数功能：该函数能在显示与隐藏窗口时能产生特殊的效果。有两种类型的动画效果：滚动动画    和滑动动画。
        /// <para>函数原型：BOOL AnimateWindow（HWND hWnd，DWORD dwTime，DWORD dwFlags）</para>
        /// <para>hWnd：指定产生动画的窗口的句柄。</para>
        /// <para>dwTime：指明动画持续的时间（以微秒计），完成一个动画的标准时间为200微秒。</para>
        /// <para>dwFags：指定动画类型。这个参数可以是一个或多个下列标志的组合。</para>
        /// </summary>
        /// <param name="hwnd">指定产生动画的窗口的句柄。</param>
        /// <param name="dwTime">指明动画持续的时间（以微秒计），完成一个动画的标准时间为200微秒。</param>
        /// <param name="dwFlags">指定动画类型。这个参数可以是一个或多个下列标志的组合。</param>
        /// <returns>如果函数成功，返回值为非零；如果函数失败，返回值为零。</returns>
        /// <remarks>
        ///在下列情况下函数将失败：窗口使用了窗口边界；窗口已经可见仍要显示窗口；窗口已经隐藏仍要隐藏窗口。若想获得更多错误信息，请调用GetLastError函数。
        ///备注：可以将AW_HOR_POSITIVE或AW_HOR_NEGTVE与AW_VER_POSITVE或AW_VER_NEGATIVE组合来激活一个窗口。
        ///可能需要在该窗口的窗口过程和它的子窗口的窗口过程中处理WM_PRINT或WM_PRINTCLIENT消息。对话框，控制，及共用控制已处理WM_PRINTCLIENT消息，缺省窗口过程也已处理WM_PRINT消息。
        ///速查：WIDDOWS NT：5.0以上版本：Windows：98以上版本；Windows CE：不支持；头文件：Winuser.h；库文件：user32.lib。
        /// </remarks>

        [System.Runtime.InteropServices.DllImport("user32")]
        public static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);

        /// <summary>
        /// 使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。
        /// </summary>
        public const int AW_BLEND = 0x80000;

        /// <summary>
        /// 隐藏窗口，缺省则显示窗口。(关闭窗口用)
        /// </summary>
        public const int AW_HIDE = 0x10000;

        /// <summary>
        /// 若使用了AW_HIDE标志，则使窗口向内重叠；若未使用AW_HIDE标志，则使窗口向外扩展。
        /// </summary>
        public const int AW_CENTER = 0x0010;


        public Form1()
        {
            InitializeComponent();
        }

        private Color _isSeleColor = Color.FromArgb(46, 204, 113);	//绿色
        [Description("控件被选中时的颜色")]
        public Color IsSeleColor			//用于获取 字体没选中的时候的 颜色
        {
            get { return _isSeleColor; }
            set { _isSeleColor = value; }
        }

        private int _selectedStatus = 1;
        [Description("哪个标签被选中")]
        public int SelectStatus				//用于标志哪一个 label被选中 1代表第一个 2第二个。。。
        {
            get { return _selectedStatus; }
            set { _selectedStatus = value; }
        }

        private Color _noSeleColor = Color.FromArgb(0, 0, 0); 
         [Description("控件未被选中时的颜色")]
        public Color NoSeleColor				//用于获取 字体未被选中时候的颜色
        {
            get { return _noSeleColor; }
            set { _noSeleColor = value; }
        }


        public event EventHandler button_userControl_click;         //用于开发人员使用该控件的时候 能够调用该控件的 点击事件 

        private void button_userControl_Load(object sender, EventArgs e)
        {
            label1.ForeColor = _isSeleColor;
            label1.Font = new Font("宋体", 22);
            label2.ForeColor = _noSeleColor;
            label3.ForeColor = _noSeleColor;
            label4.ForeColor = _noSeleColor;
            label5.ForeColor = _noSeleColor;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Form1.AnimateWindow(this.Handle, 200, Form1.AW_CENTER);
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Form1.AnimateWindow(this.Handle, 400, Form1.AW_CENTER |
            Form1.AW_HIDE);
        }

        private void label1_Click(object sender, EventArgs e)
        {
            label1.ForeColor = _isSeleColor;
            label2.ForeColor = _noSeleColor;
            label3.ForeColor = _noSeleColor;
            label4.ForeColor = _noSeleColor;
            label5.ForeColor = _noSeleColor;
            expand(label1);
            textBox1.Text = textBox1.Text+"点击了文件，好像发生了什么..." + "\r\n";
            if (SelectStatus == 2)
            {
                reduce(label2);
            }
            else if (SelectStatus == 3)
            {
                reduce(label3);
            }
            else if (SelectStatus == 4)
            {
                reduce(label4);
            }
            else if (SelectStatus == 5)
            {
                reduce(label5);
            }

            SelectStatus = 1;						//标识 用于返回 当前用户点击的是哪一个label

            if (button_userControl_click != null)		//自定义事件的触发
            {
                button_userControl_click(sender, e);
            }
        }

        private void label2_Click(object sender, EventArgs e)
        {
            label2.ForeColor = _isSeleColor;
            label1.ForeColor = _noSeleColor;
            label3.ForeColor = _noSeleColor;
            label4.ForeColor = _noSeleColor;
            label5.ForeColor = _noSeleColor;
            expand(label2);
            textBox1.Text = textBox1.Text + "点击了编辑，好像发生了什么..." + "\r\n";
            if (SelectStatus == 1)
            {
                reduce(label1);
            }
            else if (SelectStatus == 3)
            {
                reduce(label3);
            }
            else if (SelectStatus == 4)
            {
                reduce(label4);
            }
            else if (SelectStatus == 5)
            {
                reduce(label5);
            }
            SelectStatus = 2;
            if (button_userControl_click != null)
            {
                button_userControl_click(sender, e);
            }
        }

        private void label3_Click(object sender, EventArgs e)
        {
            label3.ForeColor = _isSeleColor;
            label1.ForeColor = _noSeleColor;
            label2.ForeColor = _noSeleColor;
            label4.ForeColor = _noSeleColor;
            label5.ForeColor = _noSeleColor;
            expand(label3);
            textBox1.Text = textBox1.Text + "点击了格式，好像发生了什么..." + "\r\n";
            if (SelectStatus == 1)
            {
                reduce(label1);
            }
            else if (SelectStatus == 2)
            {
                reduce(label2);
            }
            else if (SelectStatus == 4)
            {
                reduce(label4);
            }
            else if (SelectStatus == 5)
            {
                reduce(label5);
            }
            SelectStatus = 3;

            if (button_userControl_click != null)
            {
                button_userControl_click(sender, e);
            }
        }

        private void label4_Click(object sender, EventArgs e)
        {
            label4.ForeColor = _isSeleColor;
            label1.ForeColor = _noSeleColor;
            label2.ForeColor = _noSeleColor;
            label3.ForeColor = _noSeleColor;
            label5.ForeColor = _noSeleColor;
            expand(label4);
            textBox1.Text = textBox1.Text + "点击了查看，好像发生了什么..." + "\r\n";
            if (SelectStatus == 1)
            {
                reduce(label1);
            }
            else if (SelectStatus == 2)
            {
                reduce(label2);
            }
            else if (SelectStatus == 3)
            {
                reduce(label3);
            }
            else if (SelectStatus == 5)
            {
                reduce(label5);
            }
            SelectStatus = 4;

            if (button_userControl_click != null)
            {
                button_userControl_click(sender, e);
            }
        }

        private void label5_Click(object sender, EventArgs e)
        {
            label5.ForeColor = _isSeleColor;
            label1.ForeColor = _noSeleColor;
            label2.ForeColor = _noSeleColor;
            label3.ForeColor = _noSeleColor;
            label4.ForeColor = _noSeleColor;
            expand(label5);
            textBox1.Text = textBox1.Text + "点击了帮助，好像发生了什么..."+"\r\n";
            if (SelectStatus == 1)
            {
                reduce(label1);
            }
            else if (SelectStatus == 2)
            {
                reduce(label2);
            }
            else if (SelectStatus == 4)
            {
                reduce(label4);
            }
            else if (SelectStatus == 3)
            {
                reduce(label3);
            }
            SelectStatus = 5;

            if (button_userControl_click != null)
            {
                button_userControl_click(sender, e);
            }
        }



        //
        //文本的缓慢扩大和缩小开始
        //
        private static Control reduce_control = null;		//用于获取需要缩小的label
        private static Control expand_control = null;
        private static int reduce_fontsize = 15;			//定义文字缩小到15大小
        private static int expand_fontsize = 22;
        private static Timer reduce_tmrAnim = null;			//用于缓慢缩小字体的 时间控件
        private static Timer expand_tmrAnim = null;         //用于缓慢扩大字体的 时间控件

        //定义两个 时间控件 分别用于不同标签的 延时扩大和延时缩小 效果
        private static void reduce_InitTimer()
        {
            if (reduce_tmrAnim == null)
            {
                //实例化一个时间控件
                reduce_tmrAnim = new Timer();
                //14毫秒执行一次 Tick的函数
                reduce_tmrAnim.Interval = 14;
                //Tick要执行的函数tmrAnim_Tick
                reduce_tmrAnim.Tick += new System.EventHandler(reduce_tmrAnim_Tick);
            }
        }
        private static void expand_InitTimer()
        {
            if (expand_tmrAnim == null)
            {
                //实例化一个时间控件
                expand_tmrAnim = new Timer();
                //14毫秒执行一次 Tick的函数
                expand_tmrAnim.Interval = 14;
                //Tick要执行的函数tmrAnim_Tick
                expand_tmrAnim.Tick += new System.EventHandler(expand_tmrAnim_Tick);
            }
        }
        private void reduce(Control con)				//要缩小文字 的label需要调用这个函数
        {
            reduce_InitTimer();					//调用函数 创建时间控件同时
            reduce_control = con;				//获取需要缩小文字的控件
            reduce_tmrAnim.Start();				//开启时间控件的tick执行的函数
        }
        private void expand(Control con)				//要扩大文字 的label需要调用这个函数
        {
            expand_InitTimer();
            expand_control = con;
            expand_tmrAnim.Start();
        }

        private static void reduce_tmrAnim_Tick(object sender, System.EventArgs e)		//该函数是时间控件tick 需要执行的函数
        {
            reduce_control.Font = new Font("宋体", expand_fontsize);				//每14毫秒 重置该控件字体的大小 每次缩小1单位
            expand_fontsize--;
            if (expand_fontsize <= 15)
            {
                expand_fontsize = 22;
                reduce_tmrAnim.Stop();							//当字体缩小到15 大小后 停止该时间控件的tick事件
            }

        }
        private static void expand_tmrAnim_Tick(object sender, System.EventArgs e)
        {


            expand_control.Font = new Font("宋体", reduce_fontsize);
            reduce_fontsize++;
            if (reduce_fontsize >= 22)
            {
                reduce_fontsize = 15;
                expand_tmrAnim.Stop();
            }
        }
        //
        //文本的缓慢扩大和缩小结束
        //

    }
}
#endregion